import moment from 'moment'; import Tooltip from '@mui/material/Tooltip'; import IconButton from '@mui/material/IconButton'; import Button from '@mui/material/Button'; import Box from '@mui/material/Box'; import Link from '@mui/material/Link'; import Card from '@mui/material/Card'; import Container from '@mui/material/Container'; import TextField from '@mui/material/TextField'; import Typography from '@mui/material/Typography'; import PlaceOutlinedIcon from '@mui/icons-material/PlaceOutlined'; import EventIcon from '@mui/icons-material/Event'; import TuneIcon from '@mui/icons-material/Tune'; import CheckCircleOutlineIcon from '@mui/icons-material/CheckCircleOutline'; import {useTheme} from '@mui/material/styles'; import {DatePicker} from '@mui/x-date-pickers/DatePicker'; import {PropsWithChildren, useState} from 'react'; import {useTranslation} from 'react-i18next'; import pageUtils from '../../../lib/pageUtils'; import ShareEvent from '../../../containers/ShareEvent'; import useEventStore from '../../../stores/useEventStore'; import useToastStore from '../../../stores/useToastStore'; import EventLayout, {TabComponent} from '../../../layouts/Event'; import { EventByUuidDocument, useUpdateEventMutation, } from '../../../generated/graphql'; import PlaceInput from '../../../containers/PlaceInput'; interface Props { eventUUID: string; announcement?: string; } const Page = (props: PropsWithChildren) => { return ; }; const DetailsTab: TabComponent = ({}) => { const {t} = useTranslation(); const theme = useTheme(); const [updateEvent] = useUpdateEventMutation(); const addToast = useToastStore(s => s.addToast); const setEventUpdate = useEventStore(s => s.setEventUpdate); const event = useEventStore(s => s.event); const [isEditing, setIsEditing] = useState(false); if (!event) return null; const onSave = async e => { try { const {uuid, ...data} = event; const {id, travels, waitingPassengers, __typename, ...input} = data; await updateEvent({ variables: { uuid, eventUpdate: { ...input, }, }, refetchQueries: ['eventByUUID'], }); setIsEditing(false); } catch (error) { console.error(error); addToast(t('event.errors.cant_update')); } }; const modifyButton = isEditing ? ( ) : ( setIsEditing(true)}> ); return ( {t('event.details')} {modifyButton} {t('event.fields.name')} {isEditing ? ( setEventUpdate({name: e.target.value})} name="name" id="EditEventName" /> ) : ( {event.name ?? t('event.fields.empty')} )} {t('event.fields.date')} {isEditing ? ( setEventUpdate({ date: !date ? null : moment(date).format('YYYY-MM-DD'), }) } /> ) : ( {event.date ? moment(event.date).format('DD/MM/YYYY') : t('event.fields.empty')} )} {t('event.fields.address')} {isEditing ? ( setEventUpdate({ address: place, latitude, longitude, }) } /> ) : ( {event.address ? ( e.preventDefault} > {event.address} ) : ( t('event.fields.empty') )} )} {t('event.fields.description')} {isEditing ? ( setEventUpdate({description: e.target.value})} id={`EditEventDescription`} name="description" /> ) : ( {event.description ?? t('event.fields.empty')} )} {!isEditing && ( )} ); }; export const getServerSideProps = pageUtils.getServerSideProps( async (context, apolloClient) => { const {uuid} = context.query; const {host = ''} = context.req.headers; let event = null; // Fetch event try { const {data} = await apolloClient.query({ query: EventByUuidDocument, variables: {uuid}, }); event = data?.eventByUUID?.data; } catch (error) { return { notFound: true, }; } return { props: { eventUUID: uuid, metas: { title: event?.attributes?.name || '', url: `https://${host}${context.resolvedUrl}`, }, }, }; } ); export default Page;